package thread;

/**
 * 使用匿名内部类完成线程的两种创建方式
 */
public class ThreadDemo3 {
    public static void main(String[] args) {
        // 第一种创建方式：继承Thread并重写run方法的形式
        //  这里虽然可以替换为lambda表达式，但是我们查看Thread类里面发现有很多的方法
        // 之所以可以替换为lambda是因为实际上是实现了Runnable接口
        Thread t = new Thread(){
            // 重写run方法
            public void run(){
                for(int i = 0; i < 100; i++){
                    System.out.println("匿名内部类创建线程");
                }

            }
        };

        // 第二种创建方式: 实现Runnable接口并重写run方法的形式
        // 可以使用lambda表达式
       /* Runnable r = new Runnable() {
            @Override
            public void run() {
                for(int i = 0; i < 100; i++){
                    System.out.println("匿名内部类创建线程任务");
                }

            }
        };*/

        /*
        * lambda表达式：使用前提：只有一个抽象方法
        * 1. 语法格式：
        * (参数列表) -> {方法体}
        * */

        Thread t2 = new Thread(() -> {  // 查看源码发现只有一个run()抽象方法，所以可以使用lambda表达式
            for(int i = 0; i < 100; i++){
                System.out.println("匿名内部类创建线程任务");
            }
        });
        t.start();
        t2.start();
    }
}


